package me.buick.util.jmeter.snmpvisualizers;

import static javax.swing.SwingConstants.CENTER;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;

import org.apache.jmeter.visualizers.MonitorModel;

public class SNMPThroughputPanel extends SNMPPlotterPanel {

	private static final Dimension PREFERRED_PLOTTER_SIZE = new Dimension(300,
			200);
	private static final Dimension MINIMUM_PLOTTER_SIZE = new Dimension(200,
			150);

	// This is the default view range for all the overview plotters
	static final int VIEW_RANGE = -1; // Show all data
	private static final boolean IS_GTK = false;

	static Color PLOTTER_COLOR = IS_GTK ? new Color(231, 111, 80) : null;

	private JLabel infoLabel;

	public SNMPThroughputPanel() {
		super("Thoughput");
		setLayout(new BorderLayout(0, 0));

		SNMPPlotter plotter = new SNMPPlotter();
		plotter.setPreferredSize(PREFERRED_PLOTTER_SIZE);
		plotter.setMinimumSize(MINIMUM_PLOTTER_SIZE);
		plotter.setViewRange(VIEW_RANGE);
		plotter.setUnit(SNMPPlotter.Unit.PERSECOND);
		plotter.createSequence("thoughput", "Thoughput", PLOTTER_COLOR,
						true);
		setPlotter(plotter);
	}

	public void updateInfo(MonitorModel result) {
		SNMPPerformanceMonitorModel mo = (SNMPPerformanceMonitorModel) result;
		getPlotter().addValues(mo.getTimestamp(), (long)mo.getThoughput());
		//getInfoLabel().setText(result.getCpuload() + "%");
	}

	public JLabel getInfoLabel() {
		if (infoLabel == null) {
			infoLabel = new JLabel("", CENTER) {
				@Override
				public void setText(String text) {
					if (text.startsWith("<html>")) {
						// Replace spaces with nbsp, except the
						// last one of two or more (to allow wrapping)
						StringBuilder buf = new StringBuilder();
						char[] chars = text.toCharArray();
						int n = chars.length;
						for (int i = 0; i < n; i++) {
							if (chars[i] == ' '
									&& ((i < n - 1 && chars[i + 1] == ' ') || ((i == 0 || chars[i - 1] != ' ') && (i == n - 1 || chars[i + 1] != ' ')))) {
								buf.append("&nbsp;");
							} else {
								buf.append(chars[i]);
							}
						}
						text = buf.toString();
					}
					super.setText(text);
				}
			};

			if (IS_GTK) {
				JPanel southPanel = new JPanel(new BorderLayout());
				JSeparator separator = new JSeparator(JSeparator.HORIZONTAL);
				southPanel.add(separator, BorderLayout.NORTH);
				southPanel.add(infoLabel, BorderLayout.SOUTH);
				add(southPanel, BorderLayout.SOUTH);
			} else {
				add(infoLabel, BorderLayout.SOUTH);
			}
		}
		return infoLabel;
	}

	public void clearData() {
		plotter.clearData();
		
		SNMPPlotter plotter = new SNMPPlotter();
		plotter.setPreferredSize(PREFERRED_PLOTTER_SIZE);
		plotter.setMinimumSize(MINIMUM_PLOTTER_SIZE);
		plotter.setViewRange(VIEW_RANGE);
		plotter.setUnit(SNMPPlotter.Unit.PERSECOND);
		plotter.createSequence("thoughput", "Thoughput", PLOTTER_COLOR,
						true);
		setPlotter(plotter);
		setPlotter(plotter);
	}

}
